package ch.zbw.vokabeltrainer.logik;

import java.util.ArrayList;

import ch.zbw.vokabeltrainer.persistenz.DB;
/**
 * Diese Klasse enthaelt alle Methoden um Daten aus der Datenbank zu lesen
 * 
 * @author brunofliri
 *
 */
public class Laden {
	
	private DB db;//Verknuepfung mit der DB Klasse
	private Management man;//Verknuepfung mit dem Management
	/**
	 * Dieser Konstruktor erstellt ein neues  DB Object
	 * und verknuepft sich mit dem aktuellen Management Object
	 * 
	 * @param aktuell ManagementObjectReferenz
	 */
	public Laden(Management aktuell){
		db =  new DB();
		man = aktuell;
	}
	/**
	 * Diese Methode ladet alles von der Datenbank in ArrayListenen
	 * 
	 */
	public void dbLaden(){
		ArrayList<String> liste = db.gibBenutzer();
		// ForSchleife fuer Benutzerabfuellen
		for(String la: liste){
			man.newBenutzer(la);
			ArrayList<String> liste2 = db.gibSprachen(la);
			// ForSchleife fuer SprachenKombinationen abfuellen im aktuellen Benutzer
			for(String lb: liste2){
				man.newSprachenKombErstellen(lb);
				ArrayList<String> liste3 = db.gibKategorien(la);
				// Forschleife fuer Themas abfuellen in der aktuellen SprachenKombination
				for(String lc: liste3){
					man.newThemaErstellen(lc);
					ArrayList<String> liste4 = db.gibBenutzerWoerter(la, lb, lc);
					int i= liste4.size();
					int c= 0;
					//WhileSchleife um die Woerter abfuellen im aktuellen Thema
					while(i/3 < c){
						String sp1=liste4.get(c);
						c++;
						String sp2=liste4.get(c);
						c++;
						int k=Integer.parseInt(liste4.get(c));
						c++;
						man.newKarteikarteErstellenMitKoennen(sp1, sp2, k);
					}
				}
			}
		}
	}
	/**
	 * Einzelene Methode um nur Benutzer zu Laden
	 */
	public void nurBenutzerLaden(){
		ArrayList<String> liste = db.gibBenutzer();
		for(String la: liste){
			man.newBenutzer(la);
		}
	}
	/**
	 * Einzelne Methode um nur Sprachen zuladen vom aktuellen Benutzer
	 * 
	 * @param benutzer String
	 */
	public void nurSprachenLaden(String benutzer){
		ArrayList<String> liste2 = db.gibSprachen(benutzer);
		for(String lb: liste2){
			man.newSprachenKombErstellen(lb);
		}
	}
	/**
	 * Einzelne Methode um nur Themas zuladen von der aktuellen Benutzer
	 * 
	 * @param benutzer
	 */
	public void nurThemaLaden(String benutzer){
		ArrayList<String> liste3 = db.gibKategorien(benutzer);
		for(String lc: liste3){
			man.newThemaErstellen(lc);
		}
	}
	/**
	 * Ladet nur die Karteikarten dem aktuellen Thema
	 * 
	 * @param benutzer String
	 * @param sprache String
	 * @param thema String
	 */
	public void nurKarteienLaden(String benutzer, String sprache, String thema){
		ArrayList<String> liste4 = db.gibBenutzerWoerter(benutzer, sprache, thema);
		int i= liste4.size();
		int c= 0;
		while(c < i){
			String sp1=liste4.get(c);
			c++;
			String sp2=liste4.get(c);
			c++;
			int k=Integer.parseInt(liste4.get(c));
			c++;
			man.newKarteikarteErstellenMitKoennen(sp1, sp2, k);
		}
	}
}
